package com.clever.mall.mapper;

import com.clever.mall.commons.dto.ProductRequestParam;
import com.clever.mall.entity.Product;
import com.clever.mall.entity.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;

public interface ProductMapper {
    //查询热门商品的前8条
    public List<Product> selectHeatProduct();
    //以id查找商品详情
    public Product selectById(@Param("id")Integer id);
    //以品牌id查询此品牌中的热门商品前4条
    public List<Product> selectHeatByBrandId(@Param("brandId") Integer brandId);
    //以品牌id查询所有的该品牌下的商品
    public List<Product> selectAllByBrandId(@Param("brandId") Integer brandId);
    //以分裂id查询该分类的商品
    public List<Product> selectAllByCateGoryId(@Param("cateGoryId") Integer cateGoryId);
    //多条件对商品的过滤查询
    public List<Product> selectByConditions(@Param("requestParam")ProductRequestParam requestParam);
    //活动id查询参与此活动的商品
    public List<Product> selectByActId(@Param("actId") Integer actId);

    /**
     * 根据ID查询存在的库存信息
     * @param id    指定的用户ID
     * @return      库存信息
     */
    public Product selectTheProductById(@Param("id")Integer id);

    /**
     *
     * @param user      用户
     * @param offset    偏移量
     * @param size      大小
     * @return          库存产品集合
     */
    List<Product> selectByUser(@Param("user") User user, @Param("offset")Integer offset, @Param("size")Integer size);
    /**
     * 根据指定用户查询其在售的所有商品数据
     * @param user  指定用户
     * @param offset    偏移量
     * @param size      大小
     * @return          产品数据集合
     */
    List<Product> selecOnSaletByUser(@Param("user") User user, @Param("offset")Integer offset, @Param("size")Integer size);
    /**
     * 根据指定用户查询其已经售出的所有商品数据
     * @param user  指定用户
     * @param offset    偏移量
     * @param size      大小
     * @return          产品数据集合
     */
    List<Product> selectBeenSoldByUser(@Param("user") User user,@Param("offset")Integer offset,@Param("size")Integer size);
    /**
     * 根据传入的产品信息,更新价格
     * @param product       指定的产品信息
     * @return              0表示没成功，1表示成功
     */
    int updatePriceByProduct(@Param("product")Product product);


}
